CREATE CACHE GROUP文は、次の処理を実行します。
キャッシュ・グループは、外部キーを介して関連付けられる一連のキャッシュ表です。ルート表は1つで、この表は他の表を参照しません。キャッシュ・グループに含まれる他のすべてのキャッシュ表は、キャッシュ・グループ内の表を1つのみ参照します。つまり、外部キーのリレーションシップによってツリーが形成されます。
キャッシュ表は、次の条件を満たす行の集合です。
つまり、Oracle表のいくつかの列を選択してから、それらの行のサブセットを取得する場合は、その結果の行のセットが表を構成することになります。
データ・ストアに2つ以上のキャッシュ・グループがある場合、キャッシュ・グループは別々ののOracle(およびTimesTen)表に対応している必要があります。
キャッシュ・グループ・インスタンスは、ルート表の1つの行と、ルート表の行に直接的または間接的に関連付けられている子表のすべての行を参照します。
キャッシュ・グループは、システム管理またはユーザー管理のいずれかになります。
READONLY、ASYNCHRONOUS WRITETHROUGHおよびSYNCHRONOUS WRITETHROUGHのキャッシュ・グループは、システム管理キャッシュ・グループです。
ローディングやアンローディングなど、システム管理のキャッシュ・グループはTimesTenによって管理されるため、これらのキャッシュ・グループでは次のような特定の文や句を使用できません。
また、AUTOREFRESH、REFRESHおよびFLUSHは、WRITETHROUGHキャッシュ・グループでは使用できません。READONLYキャッシュ・グループでは、AUTOREFRESHはデフォルトで有効になっています。
表レベルのREADONLYキーワードは、ユーザー管理キャッシュ・グループでのみ使用できます。
さらに、TimesTenとOracleの両方が、すべてのWHERE句を解析できる必要があります。
ASYNCHRONOUS WRITETHROUGHキャッシュ・グループは、レプリケーション・エージェントの実行中には作成できません。
TimesTenインスタンスでアクセス制御が有効な場合、この文にはDDL権限が必要です。
それぞれのタイプのキャッシュ・グループは、次のCREATE CACHE GROUP文で作成します。
それぞれのタイプのキャッシュ・グループの作成に使用する文については、各項を参照してください。
READONLYのキャッシュ・グループは、次の構文で作成します。
CREATE READONLY CACHE GROUP [Owner.]GroupName
[AUTOREFRESH
[MODE {INCREMENTAL | FULL}]
[INTERVAL IntervalValue {MINUTE[S] | SECOND[S] | MILLESECOND[S] }]
[STATE {ON|OFF|PAUSED}]
]
FROM
{[Owner.]TableName (
{ColumnDefinition[,...]}
[,PRIMARY KEY(ColumnName[,...])]
[,FOREIGN KEY(ColumnName [,...])
REFERENCES RefTableName (ColumnName [,...]) [ON DELETE CASCADE]
[UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
[WHERE ExternalSearchCondition]
[AGING USE ColumnName
LIFETIME Num1 {MINUTE[S] |HOUR[S] | DAY[S]}
[CYCLE Num2 {MINUTE[S] |HOUR[S] |DAY[S]}]
[ON|OFF]
]
} [,...];
ASYNCHRONOUS WRITETHROUGHのキャッシュ・グループは、次の構文で作成します。
CREATE [ASYNCHRONOUS] WRITETHROUGH CACHE GROUP [Owner.]GroupName
FROM
{[Owner.]TableName (
{ColumnDefinition[,...]}
[,PRIMARY KEY(ColumnName[,...])]
[FOREIGN KEY(ColumnName [,...])
REFERENCES RefTableName (ColumnName [,...])]
[ ON DELETE CASCADE ]
UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
[AGING {LRU|
USE ColumnName
LIFETIME Num1 {MINUTE[S] |HOUR[S] | DAY[S]}
[CYCLE Num2 {MINUTE[S] |HOUR[S] |DAY[S]}]
}[ON|OFF]
]
} [,...];
SYNCHRONOUS WRITETHROUGHのキャッシュ・グループは、次の構文で作成します。
CREATE SYNCHRONOUS WRITETHROUGH
CACHE GROUP [Owner.]GroupName
FROM
{[Owner.]TableName (
{ColumnDefinition[,...]}
[,PRIMARY KEY(ColumnName[,...])]
[FOREIGN KEY(ColumnName [,...])
REFERENCES RefTableName (ColumnName [,...])}]
[ ON DELETE CASCADE ]
[UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
[AGING {LRU|
USE ColumnName
LIFETIME Num1 {MINUTE[S] |HOUR[S] |DAY[S]} [CYCLE Num2 {MINUTE[S] |HOUR[S] |DAY[S]}]
}[ON|OFF]
]
} [,...];
ユーザー管理キャッシュ・グループは、次の構文で作成します。
CREATE [USERMANAGED] CACHE GROUP [Owner.]GroupName
[AUTOREFRESH
[MODE {INCREMENTAL | FULL}]
[INTERVAL IntervalValue {MINUTE[S] | SECOND[S] |
MILLESECOND[S] }]
[STATE {ON|OFF|PAUSED}]
]
FROM
{[Owner.]TableName (
{ColumnDefinition[,...]}
[,PRIMARY KEY(ColumnName[,...])]
[FOREIGN KEY(ColumnName[,...])
REFERENCES RefTableName (ColumnName [,...])]
[ON DELETE CASCADE]
[, {READONLY | PROPAGATE | NOT PROPAGATE}]
[UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
[WHERE ExternalSearchCondition]
[AGING {LRU|
USE ColumnName
LIFETIME Num1 {MINUTE[S] |HOUR[S] |DAY[S]} [CYCLE Num2 {MINUTE[S] |HOUR[S] |DAY[S]}]
}[ON|OFF]
]
} [,...];
キャッシュ・グループの一般的な記述(FROMキーワードより前のすべての部分)のパラメータは、次のとおりです。
[Owner.]GroupName | 新しいキャッシュ・グループに割り当てられる所有者および名前。 |
AUTOREFRESH |
AUTOREFRESHパラメータは、OracleデータベースからTimesTenキャッシュ・グループに変更を自動的に伝播します。詳細は、「キャッシュ・グループのAUTOREFRESH」を参照してください。 |
MODE [INCREMENTAL | FULL] | 自動リフレッシュ時に更新されるキャッシュ内の行を指定します。INCREMENTAL句が指定された場合、TimesTenは前回の伝播以降にOracleに加えられた変更のみをリフレッシュします。FULL句が指定された場合、TimesTenは自動リフレッシュのたびにキャッシュ内のすべての行を更新します。デフォルトのAUTOREFRESHモードはINCREMENTALです。 |
INTERVAL IntervalValue | 自動リフレッシュを行う時間隔を分、秒またはミリ秒の単位で指定します。 IntervalValueには、AUTOREFRESHを実行する頻度をMINUTES、SECONDSまたはMILLISECONDSの単位の整数値で指定します。IntervalValueのデフォルト値は5分です。指定した時間隔でAUTOREFRESHを完了できない場合は、実行時に警告が生成され、現在の処理が終了するまで次回のAUTOREFRESHを待機します。待機キューが10に達すると、デーモン・ログに通知メッセージが生成されます。 |
STATE [ON | OFF | PAUSED] | キャッシュ・グループの作成時にAUTOREFRESHをON、OFFのいずれにするかを設定します。この設定は、ALTER CACHE GROUPコマンドを使用して後で変更できます。デフォルトでは、AUTOREFRESH STATEはPAUSEDです。 |
FROM | キャッシュ・グループに1つ以上の表定義を指定します。 |
FROMキーワード以降のすべての記述は、キャッシュ・グループがキャッシュするOracle表の定義から構成されています。各表定義の構文は、CREATE TABLE文と同様です。ただし、キャッシュ・グループ表には、主キー制約が必要です。
表定義には、次のパラメータがあります。
[Owner.]TableName | 新しい表に割り当てる所有者と名前を指定します。所有者名を指定しない場合は、新しい表の所有者名としてログイン名が使用されます。 |
ColumnDefinition | 表の個々の列の名前、データ型およびNULL値可能かどうかを指定します。各表には1つ以上の列が必要です。「列定義」を参照してください。 |
PRIMARY KEY (ColumnName[,...]) | 表に主キーを指定します。キャッシュ・グループには主キー制約が必須です。ColumnNameは表に対して作成する主キーになる列の名前です。主キーには最大16列を指定できます。1つの指定内でUNIQUEとともに指定することはできません。 |
FOREIGN KEY (ColumnName[,...]) | 表に外部キーを指定します。ColumnNameは、作成される表の外部キーとなる列の名前です。「FOREIGN KEY」を参照してください。 |
REFERENCES RefTableName (ColumnName[,...]) | 外部キーが関連付けられている表を指定します。RefTableNameは参照される表の名前で、ColumnNameは表の中で参照される列名です。 |
[ON DELETE CASCADE] |
ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。 |
READONLY | キャッシュされた表に対する変更を許可しないように指定します。 |
PROPAGATE | NOT PROPAGATE | キャッシュされた表への変更がコミットされたとき、対応するOracle表へ自動的に伝播されるかどうかを指定します。 |
UNIQUE HASH ON HashColumnName | この表にハッシュ索引を作成します。HashColumnNameには、この表のハッシュ・キーに含まれる列を指定します。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。 |
PAGES=PrimaryPages | 表の想定ページ数を指定します。PrimaryPages の数値に基づいて、ハッシュ索引用に作成されるハッシュ・バケットの数が決まります。最小値は1です。想定したページ数が少なすぎると、パフォーマンスが低下します。詳細は、「CREATE TABLE」を参照してください。 |
WHERE ExternalSearchCondition | Oracleが評価するキャッシュ・グループ表のWHERE句。このWHERE句は、キャッシュ・グループに対するすべてのLOADとREFRESH処理に追加されます。他の表を直接参照することはできません。これはTimesTenおよびOracleの両方で解析されます。『Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド』のWHERE句の使用に関する説明を参照してください。 |
AGING LRU [ON | OFF] | 指定されている場合、LRUポリシーを使用して表の行が除去されます。LRUエージングでは、最後に使用されてから長期間経過しているデータが削除され、最近使用されているデータのみがキャッシュに保持されます。使用中のデータ・ストア領域が指定のしきい値を超えると、データは削除されます。ほとんど使用されないデータで占有されていた領域は、LRUエージングによって解放されます。
LRUエージング・ポリシーは、AGING LRU句が指定されている場合に定義されます。ONやOFFの設定はエージング状態を参照します。 OFFの設定は、LRUエージング・ポリシーは定義されているが、エージング状態は無効であることを示しています。エージング状態がOFFであるため、エージングは自動的に実行されません。ONの設定は、LRUエージング・ポリシーが定義され、エージング状態が有効であることを示しています。エージング状態がONであるため、エージングは自動的に実行されます。デフォルトはONです。 LRUエージングは、自動リフレッシュが設定されたキャッシュ・グループではサポートされません。 LRUエージングの詳細は、「キャッシュ・グループでのエージング」の項を参照してください。 LRUエージングの詳細は、『Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド』のキャッシュ・グループでのエージングの実装に関する説明を参照してください。 |
AGING USE ColumnName... [ON | OFF] |
指定されている場合、時間ベースのエージング・ポリシーを使用して表内の行が除去されます。時間ベースのエージングでは、データがキャッシュに保持される存続期間を指定できます。時間の単位は日数、時間または分で指定します。 時間ベースのエージングを使用するには、ルート表に列を定義する必要があります。この列の値がSYSDATEから差し引かれ、指定した単位(分、時間、日数)を使用して切り捨てられた後、指定したLIFETIME値との比較が行われます。その結果がLIFETIME値より大きい場合、行はエージングの対象となります。列は、NOT NULLのTIMESTAMP型として定義します。 タイムスタンプ列の値は、アプリケーションによって更新されます。タイムスタンプ列の値が不明な行がある場合、その行が削除されないようにするには、タイムスタンプ列に大きなデフォルト値を定義します。 ColumnNameは、ルート表に定義したタイムスタンプ列です。 AGING USE句を指定すると、時間ベースのエージング・ポリシーが定義されます。設定のONまたはOFFは、エージング状態を表します。 OFFの設定は、時間ベースのエージング・ポリシーは定義されているが、エージング状態は無効であることを示しています。エージング状態がOFFであるため、エージングは自動的に実行されません。ONの設定は、時間ベースのエージング・ポリシーが定義され、エージング状態が有効であることを示しています。エージング状態がONであるため、エージングは自動的に実行されます。デフォルトはONです。 時間ベースのエージングの詳細は、「キャッシュ・グループでのエージング」の項を参照してください。 時間ベースのエージングの詳細は、『Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド』のキャッシュ・グループでのエージングの実装に関する説明を参照してください。 |
LIFETIME Num1 {MINUTE[S] |HOUR[S] | DAY[S] } | この句は、時間ベースのエージングの場合に必須です。AGING USE ColumnName句の後に指定します。LIFETIMEは、データがキャッシュに保持されることが保証される時間です。たとえば、単位時間Num1の間、データがキャッシュに保持されます(単位は分または時間または日数)。つまり、指定されたLIFETIME値を超えた行はエージ・アウト(表から削除)されます。
Num1は、正の整数である必要があります。Num1の値は、行がキャッシュにとどまる時間の長さを、分、時間または日数で示します。 時間の単位の概念がサポートされています。データの存続期間に指定された時間単位は、データがキャッシュに保持される単位時間の長さを表します。たとえば、時間の単位にDAYSを指定した場合、タイムスタンプの日付が同じ日になっているすべての行が同時にエージ・アウトされます。また、HOURSを時間の単位に指定した場合は、タイムスタンプ値の時間が同じ行が、すべて同時にエージ・アウトされます。 したがって、LIFETIMEが3 DAYSの場合は、LIFETIMEが72 HOURS(3×24)の場合やLIFETIMEが432 MINUTES(3×24×60)の場合とは異なります。 DAYSは、週末および祝日を含む1週間のすべての日を表します。 |
[CYCLE Num2 {MINUTE[S] |HOUR[S] | DAY[S] }] | このオプションの句は、時間ベースのエージングに固有の句で、 LIFETIME句の後に指定します。この句は、データが指定したLIFETIME値を超えているかどうか、その結果エージ・アウト(削除)する必要があるかどうかを確認するために、システムで行をチェックする頻度を示しています。
Num2は、正の整定数である必要があります。CYCLE句を指定しない場合、デフォルト値は5分です。これは、エージングが有効な場合、開始してすぐに、行が5分ごとにチェックされることを意味します。Num2に0を指定すると、エージングは継続され、エージング・スレッドがスリープ状態になることはありません。 |
AUTOREFRESHパラメータは、Oracleデータベースの変更をTimesTenキャッシュに自動的に伝播します。デフォルトでは、システム管理キャッシュ・グループは、自動的にOracleデータベースからTimesTenキャッシュに変更を伝播します。キャッシュ・グループのタイプの説明は、「ユーザー管理キャッシュ・グループおよびシステム管理キャッシュ・グループ」を参照してください。
TimesTenでは、FULLまたはINCREMENTALがサポートされています。FULLモードでは、キャッシュ全体が定期的にアンロードされてから再ロードされます。INCREMENTALモードでは、Oracleデータベースにトリガーがインストールされて変更の追跡が行われ、Oracleで変更された行のみが定期的に更新されます。PAUSED状態を使用している場合を除き、最初の増分リフレッシュは常に完全リフレッシュになります。デフォルトのモードはINCREMENTALです。
Oracle表のほとんどの行が変更されている場合は、FULL AUTOREFRESHがより有効です。変更が少ない場合は、INCREMENTAL AUTOREFRESHがより有効です。
AUTOREFRESHは、AUTOREFRESHが指定された文を含むトランザクションがコミットされた場合に、TimesTenによってスケジュールされます。AUTOREFRESHをスケジュールする文は、次のとおりです。
AUTOREFRESHの頻度は、指定した時間隔によって決まります。
AUTOREFRESHのSTATEには、ON、OFFまたはPAUSEDが指定できます。デフォルトでは、AUTOREFRESH STATEはPAUSEDです。
キャッシュ・グループでAUTOREFRESHを使用するには、最初にTimesTen ttAdminユーティリティを実行して、Oracle IDとPWDにcacheUidとcachePwdを指定するか、ttCacheUidPwdSet組込みプロシージャを実行します。
増分リフレッシュを使用してキャッシュ・グループのAUTOREFRESHをアクティブ化するには、Oracleに特定のトリガーをインストールしておく必要があります。詳細は、『Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド』を参照してください。Oracleに必要なトリガーやプロシージャはTimesTenによって自動的にインストールされます。
キャッシュ・グループでAUTOREFRESHを使用するには、キャッシュ・グループを作成する際にAUTOREFRESHを指定する必要があります。MODE、STATEおよびINTERVAL AUTOREFRESHの設定は、ALTER CACHE GROUPコマンドを使用することによって、キャッシュ・グループが作成された後で変更できます。
キャッシュ・グループをAUTOREFRESHまたはPROPAGATEに指定した後は、これらの属性を変更することはできません。
NOT PROPAGATE句とAUTOREFRESH文を同時に使用することはできません。
キャッシュ・グループのレプリケート時には、特定の要件と制限があります。『Oracle TimesTen Replication - TimesTen to TimesTen開発者および管理者ガイド』のキャッシュ・グループのレプリケーションに関する項を参照してください。
既存の表にLRUエージングを追加:
ALTER TABLE... ADD AGING LRU [ON|OFF]
既存の表に時間ベースのエージングを追加:
ALTER TABLE... ADD AGING USE ...
ALTER TABLE... DROP AGING
ALTER TABLE... SET AGING [ON | OFF]
ALTER TABLE...SET AGING LIFETIME Num1
{MINUTE[S] |HOUR[S] |DAY[S]}
ALTER TABLE... SET AGING CYCLE Num2
{MINUTE[S] |HOUR[S] |DAY[S]}
詳細は、「ALTER TABLE」を参照してください。
1. LowUsageThreshold: (割り当てられたPerm-sizeの割合)
2. HighUsageThreshold: (割り当てられたPerm-sizeの割合)
3. AgingCycle: 行に対してエージングのチェックを行う頻度(分単位)
1. LowUsageThreshold: 80%
2. HighUsageThreshold: 90%
3. AgingCycle: 1分
CALL ttAgingScheduleNow (`TableName')
CALL ttAgingScheduleNow ( );
READONLYキャッシュ・グループを作成します。
CREATE READONLY CACHE GROUP CustomerOrders
AUTOREFRESH INTERVAL 10 MINUTES
FROM
CUSTOMER (CUSTID INT NOT NULL,
NAME CHAR(100) NOT NULL,
ADDR CHAR(100),
ZIP INT,
REGION CHAR(10),
PRIMARY KEY(CUSTID)),
ORDERTAB (ORDERID INT NOT NULL,
CUSTID INT NOT NULL,
PRIMARY KEY (ORDERID),
FOREIGN KEY (CUSTID) REFERENCES CUSTOMER(CUSTID));
ASYNCHROUS WRITETHROUGHキャッシュ・グループを作成します。
CREATE ASYNCHRONOUS WRITETHROUGH cache group Customers
FROM
CUSTOMER (CUSTID INT NOT NULL,
NAME CHAR(100) NOT NULL,
ADDR CHAR(100),
ZIP INT,
PRIMARY KEY(CUSTID));
SYNCHRONOUS WRITETHROUGHキャッシュ・グループを作成します。
CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP Customers
FROM
CUSTOMER (CUSTID INT NOT NULL,
NAME CHAR(100) NOT NULL,
ADDR CHAR(100),
ZIP INT,
PRIMARY KEY(CUSTID));
USERMANAGEDキャッシュ・グループを作成します。
CREATE USERMANAGED CACHE GROUP UpdateAnywhereCustomers
AUTOREFRESH
MODE INCREMENTAL
INTERVAL 30 SECONDS
STATE ON
FROM
CUSTOMER (CUSTID INT NOT NULL,
NAME CHAR(100) NOT NULL,
ADDR CHAR(100),
ZIP INT,
PRIMARY KEY(CUSTID),
PROPAGATE);
時間ベースのエージングが指定されたキャッシュ・グループを作成します。エージング用の列として、AgeTimestampを指定します。LIFETIMEは2時間、CYCLEは30分です。エージング状態は指定しないため、デフォルト設定(ON)が使用されます。
CREATE READONLY CACHE GROUP AgingCacheGroup
AUTOREFRESH
MODE INCREMENTAL
INTERVAL 5 MINUTES
STATE PAUSED
FROM
CUSTOMER (CustomerId NUMBER NOT NULL,
AgeTimestamp TIMESTAMP NOT NULL,
PRIMARY KEY (CustomerId))
AGING USE AgeTimeStamp LIFETIME 2 HOURS CYCLE 30 MINUTES;
Command> describe customer;
Table USER.CUSTOMER:
Columns:
*CUSTOMERID NUMBER NOT NULL
AGETIMESTAMP TIMESTAMP (6) NOT NULL
Aging use AGETIMESTAMP lifetime 2 hours cycle 30 minutes on
1 table found.
(primary key columns are indicated with *)
ALTER CACHE GROUP
ALTER TABLE
DROP CACHE GROUP
FLUSH CACHE GROUP
UNLOAD CACHE GROUP